草庐IT

c++ - unique_ptr VS auto_ptr

全部标签

c++ - 是否有任何理由避免使用 tmpnam() 来获取临时文件的名称?

我打算使用tmpnam()命名一个临时文件,稍后将重命名,而不是删除。但是我找到了以下文档,现在我对上面写的部分很感兴趣“...天真的程序员可能认为它是临时文件的合适名称。”来自http://man7.org/linux/man-pages/man3/tmpnam.3.htmlThetmpnam()functionreturnsapointertoastringthatisavalidfilename,andsuchthatafilewiththisnamedidnotexistatsomepointintime,sothatnaiveprogrammersmaythinkitasui

c++ - 我需要非常快地计算斯特林的近似值

我正在编写一个用于统计抽样的小型库,它需要尽可能快地运行。在分析中,我发现该函数大约40%的时间花在了计算Stirling'sapproximation上。对于阶乘的对数。我将我的优化工作集中在这一部分上。这是我的代码(使用MPFR):constdoubleAL[8]={0.0,0.0,0.6931471806,1.791759469,3.178053830,4.787491743,6.579251212,8.525161361};voidHGD::mpfr_afc(mpfr_t&ret,constmpfr_t&val){if(mpfr_cmp_ui(val,7)我有几个不同的想法:预

c++ - 试图理解 auto_ptr

我试图了解有关auto_ptr类如何工作的某些细节。假设您有以下类(class)(我是在一个网站上找到的,该网站上有人解释了赋值运算符的要点)。classTFoo:publicTSuperFoo{auto_ptrfBar1;auto_ptrfBar2;public:TFoo&TFoo::operator=(constTFoo&that);//variousothermethoddefinitionsgohere...}现在是赋值运算符的实现。TFoo&TFoo::operator=(constTFoo&that){if(this!=&that){auto_ptrbar1=newTBar

c++ - 使用 std::unique_ptr 管理 COM 对象

我正在尝试使用智能指针在我的类中保存COM对象,同时避免使用ComPtr。是否可以为此目的使用unique_ptr?我对智能指针很陌生,到目前为止我有点困惑。请考虑以下简化代码:classTexture{private:structComDeleter{operator()(IUnknown*p){p.Release();deletep;}}ID3D11Texture*m_dumbTexture;std::unique_ptrm_smartTexture;public:ID3D11Texture*getDumbTexture()const{returnm_dumbTexture;}ID

c++ - 有什么方法可以在运行时不间断地动态更新二进制文件(可执行文件)?

假设我们在1年前用C++制作了一个程序,它一直在连续工作,没有任何停止!在1年前,我们不知道有一天我们应该更新它(由于修复了一些错误)。所以我们没有实现任何DSU(动态软件更新)说明。它也不在让我也可以访问它的内存或上下文的虚拟机中运行。现在如何在不停止的情况下对其进行更新(添加或删除一些函数、数据类型或指令)。有什么建议吗?谢谢。 最佳答案 您必须为其附加一个调试器。在不会破坏任何东西的执行点停止它,替换可执行镜像,重新对齐指令指针,如果您选择了错误的中断点,您还必须重新对齐堆栈并修改可能受到影响/添加的变量新的代码。这比您想拥有

c++ - union 中的 std::shared_ptr

我正在实现一个“变体”类,它必须具有尽可能小的内存占用并使用共享指针机制存储一些对象。为此,我想在所有变量类型的类中建立一个union。这包括一些shared_ptr。operator=和复制构造函数必须更改变量的数据类型,从而切换到union中的另一个成员。切换到shared_ptr后,应将其重置为null而无需删除/取消拥有指针。有办法做到这一点吗?当然,还有其他方法可以实现这一点,但在我的例子中,它们通常更复杂、更不安全或消耗更多内存。不过欢迎提出任何建议。谢谢! 最佳答案 重置为null是不够的;的实现std::shared

c++ - CMake:将 ELF 嵌入到可执行文件中

我有一个项目需要访问嵌入到specialsection中可执行文件中的ELF文件.我以前手工制作Makefile,只是有一个shell脚本,我在其中使用objcopy将我想要嵌入的目标复制到一个.o文件中,然后在可执行文件中链接到该文件。#Createanewsectionandcopythebinarythere($1=input$2=outputname)objcopy--input-targetbinary--output-targetelf64-x86-64\--binary-architecturei386$1$2.o现在我想摆脱自定义Makefile并使用CMake生成它们

c++ - 对于具有 UIAccess ="true"的进程,CreateProcessAsUser 失败并显示 ERROR_ELEVATION_REQUIRED

我正在尝试使用以下代码从我的服务应用程序运行用户模式进程(作为本地系统运行。)用户模式进程的要求是在没有提升的情况下运行,但在其list中有UIAccess="true"以便能够displaytop-mostwindowscorrectlyunderWindows8.所以我这样做(通过我的服务)来运行我的用户模式进程://NOTE:Errorcheckingisomittedforreadability//'dwSessionID'=usersessionIDtorunuser-modeprocessin//'pUserProcPath'=L"C:\\ProgramFiles(x86)

c++ - gdb 重新设置断点时出错(无法访问内存)

我正在尝试让gdb在pcbsd10(freebsd10)中设置一个断点。我已经用调试符号编译了我的代码,这里是gdb的输出GNUgdb(GDB)7.7Copyright(C)2014FreeSoftwareFoundation,Inc.LicenseGPLv3+:GNUGPLversion3orlaterThisisfreesoftware:youarefreetochangeandredistributeit.ThereisNOWARRANTY,totheextentpermittedbylaw.Type"showcopying"and"showwarranty"fordetails

c++ - 假设我不使用任何重载函数,有没有办法可以停止所有名称修改?

这个问题在这里已经有了答案:Isthereawaytosuppressc++namemangling?(3个答案)关闭8年前。标题几乎说明了一切。我知道我可以使用和外部“C”block来停止重整(虽然我不完全确定我应该把这个block放在哪里)但是有没有办法在整个程序中禁用它?如果我这样做,是否会使从代码编译的库更容易与luajit的FFI之类的东西一起使用?编辑:这被认为是重复的问题特定于DLL和VisualC++编译器。我只是问一个一般的C++问题。